package com.zy.reflect.dtproxy;

import java.lang.reflect.Proxy;

/**
 * @Author Gong
 * @Description
 * @dATE 2021/12/21 10:56
 **/
public class Client {
    public static void main(String[] args) {
//1.被代理类的对象
        RealSubject real=new RealSubject();
//2.创建一个实现了InvocationHandler接口的代理类的对象
        MyInvokeHandler proxy =new MyInvokeHandler(real);
        Subject proxSub = (Subject) Proxy.newProxyInstance(
                Subject.class.getClassLoader(),new Class[] { Subject.class }, proxy);
        proxSub.action("张三");
//3.调用了blink()方法，动态的返回一个同样实现了real所在类的实现接口Subject的代理类对象
//        Object obj=handler.blink(real);
//        Subject subject=(Subject) obj;//此时的subject就是代理类的对象
//        subject.action();//转到对InvocationHandler接口的实现类的invoke()的方法的调用


//        MyInvokeHandler handler=new MyInvokeHandler();
//        AdidasClothFactory adids=new AdidasClothFactory();
//        Class<?> proxyClass = Proxy.getProxyClass(adids.getClass().getClassLoader(), adids.getClass().getInterfaces());
//
//        Object obj=handler.blink(adids);//obj是真实类的代理类
//
//        ClothFactory factory=(ClothFactory) obj;
//
//        factory.clothProduct("xxx品牌");

    }

}
